pass r0-r6 as part of smc param
authorAshutosh Singh <[email protected]>
Thu, 31 Mar 2016 16:18:34 +0000 (17:18 +0100)
committerAshutosh Singh <[email protected]>
Fri, 1 Apr 2016 15:46:56 +0000 (16:46 +0100)
In new communication protocol between optee os and linux driver,
r0-r6 registers are used. opteed need to copy these registers
as well when optee context registers are initialized.

Change-Id: Ifb47b73f847c61746cb58ea78411c1c71f208030
Signed-off-by: Ashutosh Singh <[email protected]>
services/spd/opteed/opteed_main.c

index 7796fc4a51b05b1cd764a91f8dbd0333aa7dd50d..6b4b14af16d16e7ee968fc97ef07f707aa18d795 100644 (file)
@@ -265,6 +265,18 @@ uint64_t opteed_smc_handler(uint32_t smc_fid,
                cm_el1_sysregs_context_restore(SECURE);
                cm_set_next_eret_context(SECURE);
 
+               write_ctx_reg(get_gpregs_ctx(&optee_ctx->cpu_ctx),
+                             CTX_GPREG_X4,
+                             read_ctx_reg(get_gpregs_ctx(handle),
+                                          CTX_GPREG_X4));
+               write_ctx_reg(get_gpregs_ctx(&optee_ctx->cpu_ctx),
+                             CTX_GPREG_X5,
+                             read_ctx_reg(get_gpregs_ctx(handle),
+                                          CTX_GPREG_X5));
+               write_ctx_reg(get_gpregs_ctx(&optee_ctx->cpu_ctx),
+                             CTX_GPREG_X6,
+                             read_ctx_reg(get_gpregs_ctx(handle),
+                                          CTX_GPREG_X6));
                /* Propagate hypervisor client ID */
                write_ctx_reg(get_gpregs_ctx(&optee_ctx->cpu_ctx),
                              CTX_GPREG_X7,